//
//  QCAirPressionController.swift
//  爱汽车
//
//  Created by liujianlong on 2023/8/25.
//

import UIKit

class QCAirPressionController: QCViewController {
    var array = ["高压(PSI)","低压(PSI)"]
    var values : [Int] = [0,0]
    var limits = [(max:190,min:100),(max:170,min:70)]
    override func viewDidLoad() {
        super.viewDidLoad()
        initUI()
    }
    
    override func initUI() {
        title = LS("气罐压力")
        tableView.delegate = self
        tableView.dataSource = self
        tableView.register(QCAirPressionCell.nib(), forCellReuseIdentifier: QCAirPressionCell.ID())
        tableView.snp.makeConstraints { make in
            make.edges.equalToSuperview()
        }
    }
    
    override var bytes: [UInt8]{
        didSet{
            let ack = bytes[7]
            if ack == UInt8(AIQC.userInfo.ack){
                let data = [UInt8](bytes[AI_index..<bytes.count])
                values = [Int(data[87..<88].first ?? 0),
                          Int(data[88..<89].first ?? 0)]
                tableView.reloadData()
            }
        }
    }
    func action(_ value:Int, _ row:Int){
        let old_sum = values[0] - values[1]///上一次高低压值差
        values[row] = value///更新对应滚动的压力值
        let new_sum = values[0] - values[1]///更新后的高低压值差
        if new_sum > 40 || new_sum < 20{///高低压值差，如果超过40，或者小于20
            ///获取需要置换压力的坐标： 当前滚动的是高压，则另一个需要手动置换值的是低压，滚动的是低压，则需要手动置换值的是高压
            let other = row == 0 ? 1 : 0
            ///获取置换值：当前滚动的是高压，则置换=高压-上一次高低压值差，滚动的是低压，则置换值=低压+上一次高低压值差
            let result = row == 0 ? values[row] - old_sum : values[row] + old_sum
            ///对需要置换的压力进行置换：置换没有滚动的那个压力数据，并且，如果超过那个压力的上下限，取上下限，没有超过取置换值
            values[other] = result <= limits[other].min ? max(limits[other].min,result) : min(limits[other].max, result)
        }
        let str = values.map{String(format: "%.2X", UInt8($0))}.joined()
        BLEData.appSetDataToPer(AIQC.setPressure.cmd, str).write
        tableView.reloadData()
    }
}
//MARK: - UITableViewDataSource
extension QCAirPressionController:UITableViewDataSource
{
    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return array.count
    }
    
    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let cell = tableView.dequeueReusableCell(withIdentifier: QCAirPressionCell.ID()) as! QCAirPressionCell
        cell.title.text = LS(array[indexPath.row])
        cell.limit = limits[indexPath.row]
        cell.value = values[indexPath.row]
        cell.block = {[weak self] value in
            self?.action(Int(value), indexPath.row)
        }
        return cell
    }
}
//MARK: - UITableViewDelegate
extension QCAirPressionController:UITableViewDelegate{
    func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
    }
    func tableView(_ tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat {
        return 0
    }
    
    func tableView(_ tableView: UITableView, heightForFooterInSection section: Int) -> CGFloat {
        return 40
    }
    
    func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? {
        return nil
    }
    
    func tableView(_ tableView: UITableView, viewForFooterInSection section: Int) -> UIView? {
        let view = UIView()
        view.backgroundColor = .clear
        let lbl = UILabel()
        lbl.text = LS("高压和低压差不能超过40PSI")
        lbl.font = UIFont.systemFont(ofSize: 14)
        lbl.numberOfLines = 0
        lbl.textHexColor = "#AEAEAE"
        view.addSubview(lbl)
        lbl.snp.makeConstraints { make in
            make.centerY.equalToSuperview()
            make.left.right.equalToSuperview().inset(20)
        }
        return view
    }
}
